# 正则表达式模块
import re
"""
	读取文件
"""

# 安全打开文件并在读取完成后自动关闭
# f可以看做是打开文件后得到的文件对象.我们对文件的所有读写操作都是通过这个变量:f来实现的
"""
    model : x 是新建一个文件并以write的方式来开文件
            w 是以write的方式打开一个文件.每次写入都会把之前的所有内容覆盖掉
            a 是以write的方式打开一个文件.每次写入是在上一次写入之后追加的.
            r 是以读取的方式打开一个文件
"""
with open("../../Resource/WoniuSales.txt","r") as f:
    """
        读取文件中的全部内容.文件中有多少行,列表就有多少个元素
            列表中的每个元素对应的就是文件中的每一行!
    """
    lines = f.readlines()


"""
    用字典来模拟对象
    [{title,step}]
        tilte 就是标题
        step  就是s1 s2 s3 这些测试步骤
    为什么还要使用列表.因为有多个测试用例
"""
#  保存标题的下标.
index = []
dct = {}

# enumerate(序列) 得到序列中的元素和元素对应的下标
for i,line in enumerate(lines):
    # 判断每一行是否以test_login开头. 如果是则表示这一行是标题
    if re.match("^test_login",line):
        # 记录当前标题的下标.
        index.append(i)
        
    # 读到第二个标题了.第一个标题所对应的完整的测试用例已经读取完成.开始切片
    if len(index) == 2:
        dct[lines[index[0]]] = lines[index[0]+1:index[1]]
        # 为什么要删掉0 永远保证index列表中只有两个下标.
        del index[0]
# 补切最后一个用例
dct[lines[index[0]]] = lines[index[0]+1:]


# 取字典中的所有的键值对
for item in dct.items():
    lst = list(item)
    # 处理字典的键
    # 字符串函数split(":")以冒号为介质来分割字符串得到列表
    lst[0] = lst[0].split(":")[0]
    
    # 处理字典的值
    for index,element in enumerate(lst[1]):
        # 去掉每行头尾的\t\n
        # strip(" ")去掉收尾的空格
        # replace("old","new") 使用新的替换就的
        element = element.strip(" ").replace("\n","").replace("\t","").replace("\r","")
        lst[1][index] = element
    
        # 删除空行
        if element == "":
            lst[1].pop(index)
            continue
        # 删除注释行
        if element[0] == "#":
            lst[1].pop(index)
        
    print(lst)

    













    